package dao.impl;

import dao.UserDao;
import entity.User;
import util.DbUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

/**
 * @Author lzp
 * @Date 2023-11-21
 */
public class UserDaoImpl implements UserDao {

    @Override
    public User selectUser(String username) {
            User user = null ;
            //第一：定义操作数据库的SQL语句
            String sql = "select users_id,username,password,phone,name,avatar from users where username = ?";

            //第二：获取连接对象
            Connection conn = DbUtil.getConnection();

            //第三：使用连接对象，获取语句对象(PreparedStatement)，并预编译SQL语句
            PreparedStatement pstmt = null ;
            ResultSet rst = null ;
            try {
                pstmt= conn.prepareStatement(sql);

                //第四：设置数据
                //语法：语句对象.setXxx(问号占位符索引,数据) ;
                pstmt.setString(1,username);

                //第五：执行SQL语句，并接收返回结果
                //语句对象.executeUpdate() -> 增,删,改	   ->  返回的是受影响的记录数
                //语句对象.executeQuery()  -> 查			-> 	返回的是结果集(ResultSet)
                rst = pstmt.executeQuery() ;
                //第六：对结果进行处理
                //遍历结构集各行各列的数据，封装到相关的实体对象或集合
                //判断有没有数据:结果集对象.next()
                //获取结果集的数据:
                //结果集对象.getXxx(查询数据的索引) ;
                //结果集对象.getXxx(查询数据的字段名称) ;
                if(rst.next()) {
                    // 1.读取数据
                    int id = rst.getInt(1) ;
                    String password = rst.getString(3) ;
                    String phone = rst.getString(4) ;
                    String name = rst.getString(5) ;
                    String avatar = rst.getString(6) ;

                    // 2.创建实体对象
                    user = new User() ;
                    //3.封装数据
                    user.setUsersId(id);
                    user.setUserName(username);
                    user.setPassWord(password);
                    user.setPhone(phone);
                    user.setName(name);
                    user.setAvatar(avatar);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                // 第七：关闭对象
                DbUtil.close(conn,pstmt,rst);
            }
            return user;
    }
}

